package com.haixiaoke.saas.repository.mapper;

import com.haixiaoke.saas.repository.pojo.UserFloatingPopulationRecord;
import com.haixiaoke.saas.repository.vo.UserFloatingPopulationRecordVo;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.List;


/**
 * 流动用户记录Mapper接口
 *
 * @author qixi
 * @date 2023-07-25
 */
public interface UserFloatingPopulationRecordMapper {
    /**
     * 查询流动用户记录
     *
     * @param id 流动用户记录主键
     * @return 流动用户记录
     */
    UserFloatingPopulationRecord selectUserFloatingPopulationRecordById(Long id);

    /**
     * 查询流动用户记录列表
     *
     * @param userFloatingPopulationRecord 流动用户记录
     * @return 流动用户记录集合
     */
    List<UserFloatingPopulationRecord> selectUserFloatingPopulationRecordList(UserFloatingPopulationRecord userFloatingPopulationRecord);
    /**
     * 查询流动用户记录列表
     *
     * @param userFloatingPopulationRecord 流动用户记录
     * @return 流动用户记录集合
     */
    List<UserFloatingPopulationRecordVo> selectUserFloatingPopulationRecordAndHouseInfoList(UserFloatingPopulationRecord userFloatingPopulationRecord);

    /**
     * 新增流动用户记录
     *
     * @param userFloatingPopulationRecord 流动用户记录
     * @return 结果
     */
    int insertUserFloatingPopulationRecord(UserFloatingPopulationRecord userFloatingPopulationRecord);

    /**
     * 修改流动用户记录
     *
     * @param userFloatingPopulationRecord 流动用户记录
     * @return 结果
     */
    int updateUserFloatingPopulationRecord(UserFloatingPopulationRecord userFloatingPopulationRecord);

    /**
     * 删除流动用户记录
     *
     * @param id 流动用户记录主键
     * @return 结果
     */
    int deleteUserFloatingPopulationRecordById(Long id);

    /**
     * 批量删除流动用户记录
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteUserFloatingPopulationRecordByIds(Long[] ids);

    /**
     * 查询当前机构下本日总人员数量
     * @param id 组织id
     * @param residenceCommunityId 小区id
     * @param areaId 区域编码
     * @param areaTag 区域字段
     * @return
     */
    int selectTotalNumber(@Param("id") Long id,@Param("residenceCommunityId") String residenceCommunityId, @Param("communityIds") List<String> communityIds);

    /**
     * 查询当前机构下本日新增人员数量
     *
     * @param id 组织id
     * @param residenceCommunityId 小区id
     * @param areaId 区域编码
     * @param areaTag 区域字段
     * @return
     */
    int selectNewPersonnelNumber(@Param("id") Long id,@Param("residenceCommunityId") String residenceCommunityId, @Param("communityIds") List<String> communityIds);

    /**
     *查询出当前机构这周的新增人员
     */
    int selectWeeklyNewPersonnel(@Param("orgId") Long orgId, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("residenceCommunityId") String residenceCommunityId, @Param("communityIds") List<String> communityIds);

    /**
     *查询出当前机构这周的迁出人员
     */
    int selectWeeklyEmigrantsPersonnel(@Param("orgId") Long orgId, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("residenceCommunityId") String residenceCommunityId, @Param("communityIds") List<String> communityIds);

    /**
     * 查询出当前机构这周新增人员数量
     */
    int selectMonthNewPersonnel(@Param("orgId") Long orgId, @Param("monthDate") LocalDate monthDate, @Param("residenceCommunityId") String residenceCommunityId, @Param("communityIds") List<String> communityIds);

    /**
     * 查询出前端机构月度迁出的人员数量
     */
    int selectMonthEmigrantsPersonnel(@Param("orgId") Long orgId, @Param("monthDate") LocalDate monthDate, @Param("residenceCommunityId") String residenceCommunityId, @Param("communityIds") List<String> communityIds);

    /**
     * 查询出当前机构季度新增人员数量
     */
    int selectQuarterNewPersonnel(@Param("orgId") Long orgId, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("residenceCommunityId") String residenceCommunityId, @Param("communityIds") List<String> communityIds);

    /**
     * 查询出前端机构季度迁出的人员数量
     */
    int selectQuarterEmigrantsPersonnel(@Param("orgId") Long orgId, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("residenceCommunityId") String residenceCommunityId, @Param("communityIds") List<String> communityIds);

    /**
     * 查询出当前机构月度新增人员数量
     */
    int selectYearNewPersonnel(@Param("orgId") Long orgId,@Param("strYear") String strYear,@Param("residenceCommunityId") String residenceCommunityId, @Param("communityIds") List<String> communityIds);

    /**
     * 查询出前端机构月度迁出的人员数量
     */
    int selectYearEmigrantsPersonnel(@Param("orgId") Long orgId,@Param("strYear") String strYear,@Param("residenceCommunityId") String residenceCommunityId, @Param("communityIds") List<String> communityIds);

    List<UserFloatingPopulationRecordVo> selectUserFloatingPopulationRecordAndHouseInfoListByPopulationIds(UserFloatingPopulationRecordVo vo);

    /**
     * 查询出当前机构总入住人员数量
     */
    int selectNewPersonnelInfo(@Param("orgId") Long orgId, @Param("residenceCommunityId") String residenceCommunityId, @Param("communityIds") List<String> communityIds);

    /**
     * 查询出当前机构总迁出人员数量
     */
    int selectEmigrantsPersonnelInfo(@Param("orgId") Long orgId, @Param("residenceCommunityId") String residenceCommunityId, @Param("communityIds") List<String> communityIds);
}
